package main

import (
	"errors"
	"fmt"
)

func main() {

	//	1.go中追求代码优雅，引入机制， defer + recover机制处理错误
	test()
	fmt.Println("test 之后的程序继续执行")

	//	2.自定义错误
	err := test2(5, 0)
	if err != nil {
		fmt.Println("错误是=====>", err)
		// 使用panic捕获err,程序将会再次抛出错误，但钱go程序终止，后面程序将不会再执行
		panic(err)
	}

	fmt.Println("test2 之后的程序继续执行")

}

func test() {
	//利用defer + recover来捕获错误： defer后面加上匿名函数的调用
	defer func() {
		eor := recover()
		if eor != nil {
			fmt.Println("错误已经捕获")
			fmt.Println("Eor:", eor)
		}
	}()

	//-------------------------
	var a = 10
	var b = 0
	fmt.Println(a / b)
}

func test2(a int, b int) (eor error) {
	//利用defer + recover来捕获错误： defer后面加上匿名函数的调用
	if b == 0 {
		eor = errors.New("除数不能为0~~~")
		return
	}
	fmt.Println(a / b)
	// 执行正常返回nil
	return nil
}
